在ruc配色中,主要选择了两种配色方案,一种为红色与灰色搭配,另一种为取自官网的红色与棕色配色。
1.载入R包
首先载入数据,在这里我们加载绘图需要的包,并先对数据进行简单处理。
library(ggthemr)
library(ggplot2)
library(gridExtra)
library(ggthemes)
library(ggridges)
library(dplyr)
library(vcd)
library(ggrepel) #用于对密集散点的标柱
library(plotly) #交互式气泡图作图包
library(gapminder) #数据来源包
library(highcharter)
library(viridisLite)
library(circlize)
library(wrGraph)
library(FactoMineR) #绘制wrGraph图形
library(factoextra)
library(RColorBrewer)
2.数据处理
setwd("/Users/apple/Desktop/ggplot 可视化")
movie=read.csv("清洗后数据.csv")
college=read.csv("college.csv")
data <- gapminder %>% filter(year=="2007")%>%dplyr::select(-year) # 数据来源是gapminder包,选择其中2007年的数据删去year一列
gui<-read.csv("2015.csv")
data("vaccines") #highcharter自带的数据集
x=c(11,34,16,34,23,12,46,322,5,78,22,445,22,12,234,24,74,23,21,57)
data1=matrix(x,nrow=5,ncol=4)
rownames(data1)=c("chromosome1","chromosome2","chromosome3","chromosome4","chromosome5") #生成行名
colnames(data1)=c("gene1","gene2","gene3","gene4") # 生成列名
2.基本图形准备
绘制堆积图和环形图来展示色条。
在ggthemr包中,利用define_palette()函数可以较为简便定义palette。gathmr包中,绘制图形时颜色读取顺序与别的包不太一致,ggthemr是从自定义色条的中间向两边根据颜色的数目提取,故在这里将“人大红”放在了色条的正中。
ruc_grey=define_palette(
swatch = c('#c47775','#c6c6c6','#8b8b8b','#ad0b2c','#c8928f','#be5b5b','#545454'), ##自定义用于几何图形颜色绘制的颜色向量
gradient = c(upper='#c6c6c6',lower='#ad0b2c')) ##颜色选择步长范围
ggthemr(ruc_grey) ##主题设定
grid.arrange(stacked,bubble,ridgeline,ncol=2) ##将图形按照两列排列
从中国人民大学官网上,通过取色器取色得到官网配色,绘制图形如下:
ruc_web=define_palette(swatch = c('#FEF9EC','#CCB08F','#948D74','#AD0b2C','#AB896D','#FFEDC8' ),
gradient =c(upper='#AB896D',lower='#AD0b2C')
)
ggthemr(ruc_web)
grid.arrange(stacked,bubble,ridgeline,ncol=2)
在ggthemr包中,在绘制图形时,色条颜色的选择控制较难,且对背景版的theme调整较少。
divlist <- c("ruc3","ruc2","ruc4") ##定义极端型色条
names(divlist) <- divlist
seqlist <- c("ruc1") ##定义连续型色条
names(seqlist) <- seqlist
divnum <- rep(10, length(divlist))
names(divnum) <- divlist ##获取离散型色条的名称
seqnum <- rep(8, length(seqlist))
names(seqnum) <- seqlist ##获取连续型色条的名称
namelist<-c(divlist,seqlist) ##色条的名称列表
maxcolors <- c(divnum,seqnum) ##色条的色块个数
brewer.pal<-function(n,name){ ##定义颜色填充函数
if(!(name %in% namelist)){
stop(paste(name,"is not a valid palette name for brewer.pal\n"))
}
if(n<3){
warning("minimal value for n is 3, returning requested palette with 3 different levels\n")
return(brewer.pal(3,name))
}
if(n>maxcolors[which(name==namelist)]){
warning(paste("n too large, allowed maximum for palette",name,"is",maxcolors[which(name==namelist)]),
"\nReturning the palette you asked for with that many colors\n")
return(brewer.pal(maxcolors[which(name==namelist)],name))
}
switch(name,
ruc1 = switch(n-2, ##红——橙色——灰
rgb(c(200,198,214),
c(146,198,96),
c(143,198,77),maxColorValue=255),
rgb(c(178,214,244,253),
c(24,96,165,219),
c(43,77,130,199),maxColorValue=255),
rgb(c(178,214,244,253,224),
c(24,96,165,219,224),
c(43,77,130,199,224),maxColorValue=255),
rgb(c(178,214,244,253,224,186),
c(24,96,165,219,224,186),
c(43,77,130,199,224,186),maxColorValue=255),
rgb(c(178,214,244,253,224,186,135),
c(24,96,165,219,224,186,135),
c(43,77,130,199,224,186,135),maxColorValue=255),
rgb(c(178,214,244,253,224,186,135,77),
c(24,96,165,219,224,186,135,77),
c(43,77,130,199,224,186,135,77),maxColorValue=255)
),
ruc2 = switch(n-2, ##官网取色(红——棕)
rgb(c(148,200,173),
c(141,146,11),
c(116,143,44),maxColorValue=255),
rgb(c(204,148,173,200),
c(176,141,11,146),
c(143,116,44,143),maxColorValue=255),
rgb(c(171,204,148,173,200),
c(137,176,141,11,146),
c(109,143,116,44,143),maxColorValue=255),
rgb(c(255,171,204,148,173,200),
c(237,137,176,141,11,146),
c(200,109,143,116,44,143),maxColorValue=255),
rgb(c(254,255,171,204,148,173,200),
c(249,237,137,176,141,11,146),
c(236,200,109,143,116,44,143),maxColorValue=255)
),
ruc3 = switch(n-2, ##红灰配色
rgb(c(200,139,173),
c(146,139,11),
c(143,139,44),maxColorValue=255),
rgb(c(198,139,173,200),
c(198,139,11,146),
c(198,139,44,143),maxColorValue=255),
rgb(c(198,139,173,200,190),
c(198,139,11,146,91),
c(198,139,44,143,91),maxColorValue=255),
rgb(c(196,198,139,173,200,190),
c(119,198,139,11,146,91),
c(117,198,139,44,143,91),maxColorValue=255),
rgb(c(196,198,139,173,200,190,84),
c(119,198,139,11,146,91,84),
c(117,198,139,44,143,91,84),maxColorValue=255)
),
ruc4 = switch(n-2, ##红灰配色
rgb(c(148,200,173),
c(141,146,11),
c(116,143,44),maxColorValue=255),
rgb(c(204,148,173,200),
c(176,141,11,146),
c(143,116,44,143),maxColorValue=255),
rgb(c(171,204,148,173,200),
c(137,176,141,11,146),
c(109,143,116,44,143),maxColorValue=255),
rgb(c(255,171,204,148,173,200),
c(237,137,176,141,11,146),
c(200,109,143,116,44,143),maxColorValue=255),
rgb(c(254,255,171,204,148,173,200),
c(249,237,137,176,141,11,146),
c(236,200,109,143,116,44,143),maxColorValue=255),
rgb(c(254,255,171,204,148,173,200,198,139,84),
c(249,237,137,176,141,11,146,198,139,84),
c(236,200,109,143,116,44,143,198,139,84),maxColorValue=255)))
}
theme_ruc_black <- function(base_size = 12, ##主题函数设定
color =" white",
base_family = "sans",
title_family = "sans") {
theme_foundation(base_size = base_size,
base_family = base_family) +
theme(line = element_line(linetype = 1, colour = "black"),
rect = element_rect(fill = "white",
linetype = 0,
colour = "black"), ##背景版设定
text = element_text(colour = "black"),
title = element_text(family = title_family, ##标题字体设定
size = rel(1)), ##标题大小设定
axis.title = element_blank(), ##坐标轴标题设定
axis.text = element_text(face = "bold", ##坐标轴文字设定
size = rel(1)), ##坐标轴文字大小
axis.text.x = element_text(colour = NULL),
axis.text.y = element_text(colour = NULL),
axis.ticks = element_line(colour = NULL),
axis.ticks.y = element_blank(),
axis.ticks.x = element_line(colour = NULL),
axis.line = element_line(),
axis.line.y = element_blank(),
legend.background = element_rect(), ##图例背景板颜色
legend.position = "top",
legend.direction = "horizontal",
legend.box = "vertical",
panel.grid = element_line(colour = NULL,
linetype = 3),
panel.grid.major = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor = element_blank(),
plot.title = element_text(hjust = 0,
face = "plain"), ##字体设定
plot.margin = unit(c(0.5, 0.5, 0.5, 0.5), "lines"), ##绘制图形边界设定
strip.background = element_rect())
}
##1
stacked1=stacked+
scale_fill_manual(values =brewer.pal(4,"ruc2"))+
theme_ruc_black()
##2
bubble1=bubble+
scale_color_manual(values =brewer.pal(6,"ruc1"))+
theme_ruc_black()
##3
densitycontour1=densitycontour+
scale_fill_manual(values =colorRampPalette(rev(brewer.pal(7,'ruc2'))) (20))
##4
ridgeline1=ridgeline+
scale_fill_gradientn(colors=colorRampPalette(rev(brewer.pal(3,'ruc2')))(20))+
theme_ruc_black()
grid.arrange(stacked1,densitycontour1,bubble1,ridgeline1,ncol=2)
##5
wrgraph11=fviz_pca_ind(iris.Fac,
geom.ind="point", #点图
col.ind=iris$Species, #颜色按照species填充
palette=brewer.pal(3,"ruc2"), #调色板
addEllipses=TRUE, #椭圆形
legend.title="Groups" ) #图例名称
wrgraph11
##6
wrgraph12=plotPCAw(t(as.matrix(iris[,-5])),
gl(3,50,labels=c("setosa","versicolor","virginica")), #3组50个点
tit="Iris data",
rowTyName="types of leaves",
suplFig=FALSE,
colBase=brewer.pal(3,"ruc2"),
cexTxt=1.3, #字符大小
rotatePC=2) #主成分图旋转
##7
rf <- colorRampPalette(rev(brewer.pal(3,'ruc2'))) ##颜色设定
r <- rf(20)
heatmap=hchart(vaccines, "heatmap", hcaes(x = year, y = state, value = count)) %>% #横纵坐标所对应的list以及填入的值
hc_colorAxis(stops = color_stops(10, rev(inferno(10))),type ="red") %>% #设置颜色的渐变(stops标量色轴的梯度)
hc_yAxis(reversed = TRUE, offset = -20, tickLength = 0, #设置y轴,反转y轴(使最大值最接近原点),
gridLineWidth = 0, minorGridLineWidth = 0, #轴标题到轴线的距离,主刻度的像素长度,网格线的宽度等
labels = list(style = list(fontSize = "8px"))) %>%
hc_tooltip(formatter = fntltp) %>% #设置tooltip
hc_xAxis(plotLines = list(plotline)) %>% #绘制疫苗上市线
hc_title(text = "Infectious Diseases and Vaccines") %>% #标题
hc_legend(layout = "vertical",
verticalAlign = "top", #legend,右上竖直放置
align = "right",
valueDecimals = 0) %>%
hc_size(height = 600) #图大小
heatmap
##8
mosai1=mosaic(~Class+Age+ Sex + Survived ,
data = Titanic,
highlighting = T, ##准许改变颜色
highlighting_fill = brewer.pal(7,"ruc2") ##调整颜色
)